composetable: Parse hex escapes too
authorMatthias Clasen <mclasen@redhat.com>
Tue, 2 Feb 2021 17:00:51 +0000 (12:00 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 2 Feb 2021 17:05:19 +0000 (12:05 -0500)
This was a small omission from the Compose file
syntax that doesn't cost us much to support.

Add a test for this syntax too.

Fixes: #1004
gtk/gtkcomposetable.c
testsuite/gtk/compose/hex [new file with mode: 0644]
testsuite/gtk/compose/hex.expected [new file with mode: 0644]
testsuite/gtk/composetable.c

index a4c91abd900f1f2866ffa625b9cbfc48ca80f00d..a07f5da06f0654794148ee22a0e25d62517737d2 100644 (file)
@@ -113,6 +113,22 @@ parse_compose_value (GtkComposeData *compose_data,
           else if (p[1] >= '0' && p[1] < '8')
             {
               ch = g_ascii_strtoll (p + 1, &endp, 8);
+              if (ch == 0)
+                {
+                  g_warning ("Invalid escape sequence: %s: %s", val, line);
+                  goto fail;
+                }
+              g_string_append_unichar (value, ch);
+              p = endp;
+            }
+          else if (p[1] == 'x' || p[1] == 'X')
+            {
+              ch = g_ascii_strtoll (p + 2, &endp, 16);
+              if (ch == 0)
+                {
+                  g_warning ("Invalid escape sequence: %s: %s", val, line);
+                  goto fail;
+                }
               g_string_append_unichar (value, ch);
               p = endp;
             }
diff --git a/testsuite/gtk/compose/hex b/testsuite/gtk/compose/hex
new file mode 100644 (file)
index 0000000..2679721
--- /dev/null
@@ -0,0 +1 @@
+<Multi_key> <s> <e> <q> : "\x23fe\X23F3"
diff --git a/testsuite/gtk/compose/hex.expected b/testsuite/gtk/compose/hex.expected
new file mode 100644 (file)
index 0000000..6033442
--- /dev/null
@@ -0,0 +1,3 @@
+# n_seqs: 1
+# max_seq_len: 4
+<Uff20> <U73> <U65> <U71> : "⏾⏳"
index 2d88ad570dff605401377566d5c141a123df737d..b41faf08f21df3fe59b8c772cff55ddc0c8d1461 100644 (file)
@@ -308,6 +308,7 @@ main (int argc, char *argv[])
   g_test_add_data_func ("/compose-table/basic", "basic", compose_table_compare);
   g_test_add_data_func ("/compose-table/long", "long", compose_table_compare);
   g_test_add_data_func ("/compose-table/octal", "octal", compose_table_compare);
+  g_test_add_data_func ("/compose-table/hex", "hex", compose_table_compare);
   g_test_add_data_func ("/compose-table/codepoint", "codepoint", compose_table_compare);
   g_test_add_data_func ("/compose-table/multi", "multi", compose_table_compare);
   g_test_add_data_func ("/compose-table/strings", "strings", compose_table_compare);